import time

from uiautomation import WindowControl, MenuControl
from wxauto import *
from XunFeiGpt import Get_AI_Reply
from MonitorChat import *
from ChatHistory import *


def get_default_messages():
    # 绑定微信主窗口
    wx = WindowControl(
        Name='微信',
    )
    # 切换窗口
    wx.SwitchToThisWindow()
    wx = WeChat()  # 获取当前微信客户端
    # 获取监听微信列表
    listenList = GetListenList()
    # 获取好友列表
    friend_list = GetUsersList()
    # 初始化AI回复消息列表
    InitDic(friend_list)
    # 监听信息
    for i in listenList:
        wx.AddListenChat(who=i, savepic=False)
    # 初始化 好友消息列表 好友等待时间
    msg_dict = {}
    msg_wait_time = {}
    for sender in friend_list:
        msg_dict[sender] = []
        msg_wait_time[sender] = 0
    # 持续监听消息，并且收到消息后打印
    wait = 1  # 设置1秒查看一次是否有新消息
    wait_answer = 2  # 每隔x句回复一次消息
    wait_second = 8  # 每隔x秒回复一次消息
    while True:
        # 获取监听消息
        msgs = wx.GetListenMessage()
        # 遍历监听消息列表
        for chat in msgs:
            chatWindow = chat.who  # 获取聊天窗口名
            one_msgs = msgs.get(chat)  # 获取消息内容
            # 遍历接收消息内容
            for msg in one_msgs:
                sender = msg.sender  # 发送人的名称
                msgType = msg.type  # 获取消息类型
                content = msg.content  # 获取消息内容，字符串类型的消息内容
                print(f'【{chatWindow}】：{sender} {msgType} {content}')  # 打印消息内容
                # 如果是好友发来的消息（即非系统消息等）则记录
                if msgType == 'friend':
                    msg_dict[sender].append(content)
                    # 如果消息条数达到了回复的标准 则回复消息
                    if len(msg_dict[sender]) >= wait_answer or (msg_wait_time[sender]) >= wait_second:
                        information = GetUserInformation(sender)  # 获取好友的特定背景
                        aiMsgs = GetAIMessage(sender)  # 获取AI对好友的历史回复
                        message = Get_AI_Reply(aiMsgs, msg_dict[sender], information)  # 获取AI回复
                        chat.SendMsg(message)  # 回复消息
                        AddAIMessage(sender, message)  # 存储AI消息
                        # 重置条件
                        msg_dict[sender].clear()
                        msg_wait_time[sender] = 0
        time.sleep(wait)
        # 好友等待回复时间加一秒
        for sender in msg_wait_time:
            msg_wait_time[sender] = msg_wait_time[sender] + 1


if __name__ == '__main__':
    get_default_messages()
